// 矩阵快速幂模板
// 测试链接 ：https://www.luogu.com.cn/problem/P3390
// 相关帖子 ：https://www.cnblogs.com/dx123/p/16669615.html
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

#define ll long long
const int MOD = 1000000007;
ll n, k;

struct matrix
{
    ll c[101][101];
    
    matrix()
    {
        memset(c, 0, sizeof c);
    }
}A, ans;

// 返回矩阵 x 和 y 相乘的结果
matrix operator*(matrix& x, matrix& y)
{
    matrix ans; // 临时矩阵
    for(int i = 1; i <= n; ++i)
    {
        // 将 j 和 k 调换可以提高缓存命中率，常数时间更好
        for(int k = 1; k <= n; ++k)
        {
            for(int j = 1; j <= n; ++j)
            {
                ans.c[i][j] = (ans.c[i][j] + x.c[i][k] * y.c[k][j]) % MOD;
            }
        }
    }
    return ans;
}

// 快速幂
void quickPow(ll k)
{
    // 单位矩阵
    for(int i = 1; i <= n; ++i) ans.c[i][i] = 1;
    while(k)
    {
        if(k & 1) ans = ans * A;
        A = A * A;
        k >>= 1;
    }
}

int main()
{
    scanf("%d%lld", &n, &k);
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j <= n; ++j)
        {
            scanf("%d", &A.c[i][j]);
        }
    }
    quickPow(k);
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j <= n; ++j)
        {
            printf("%d ", ans.c[i][j]);
        }
        puts("");
    }

    return 0;
}